/*
 * 测试静态字段和静态方法 
 * 1、直接在类体中声明字段是非标准的语法(并不存在于ES2021规范中)
 * 2、有 static 修饰的字段属于静态字段，应该通过类名来访问
 * 3、有 static 修饰的方法属于静态方法，应该通过类名来访问
 */

class Elephant {
    static school ; // 静态字段
    name ; // 公开的实例字段
    #age ; // 私有的实例字段
    constructor(name,age){
        // 在构造函数中将实例字段初始化
        this.name = name ;
        // 在类内使用私有字段时仍然要使用#前缀
        this.#age = age ;
    }
    // 为私有字段提供getter
    get age(){
        return this.#age ;
    }
    // 为私有字段提供setter
    set age(a){
        this.#age = a ;
    }
    // 在方法之前使用static修饰即为静态方法
    static show(){
        console.log( '这里是' + Elephant.school );
    }
}

console.log( Elephant.school ); // undefined
// 通过类名来访问静态字段
Elephant.school = '小飞象学院' ;
console.log( Elephant.school ); // 小飞象学院

// 通过类名来调用静态方法
Elephant.show();

let e = new Elephant( '小白象' , 10 );
console.log( e );
console.log( e.name , e.age );